#ifndef DRINK_H
#define DRINK_H

#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>

// 饮品分类最大长度
#define DRINK_CATEGORY_LEN 16
#define DRINK_TASTE_LEN    16
#define DRINK_NAME_LEN     32

// 饮品信息结构体
typedef struct {
    int id;                         // 饮品编号
    char name[DRINK_NAME_LEN];      // 名称
    char category[DRINK_CATEGORY_LEN]; // 分类
    char taste[DRINK_TASTE_LEN];    // 口味
    int stock;                      // 可提供份数
    float price;                    // 价格
} Drink;

// 饮品链表节点结构体
typedef struct DrinkNode {
    Drink data;
    struct DrinkNode* next;
} DrinkNode;

// 链表操作函数声明

// 加载所有饮品信息到链表，返回饮品数量
int load_drinks(const char* filename, DrinkNode** head);

// 保存所有饮品信息到文件，返回保存的饮品数量
int save_drinks(const char* filename, DrinkNode* head);

// 添加新饮品到链表尾部，若编号已存在则不添加，返回1成功，0已存在
int add_drink(DrinkNode** head, const Drink* new_drink);

// 根据饮品编号删除饮品，成功返回1，失败返回0
int delete_drink(DrinkNode** head, int drink_id);

// 查找饮品，返回指向该节点的指针，未找到返回NULL
DrinkNode* find_drink_by_id(DrinkNode* head, int drink_id);

// 修改饮品信息，成功返回1，失败返回0
int update_drink(DrinkNode* head, const Drink* updated_drink);

// 按名称、分类、口味等条件查询饮品，返回链表（需实现）
DrinkNode* query_drinks(DrinkNode* head, const char* name, const char* category, const char* taste);

// 打印所有饮品信息（调试用）
void print_all_drinks(DrinkNode* head);

// 释放链表内存
void free_all_drinks(DrinkNode* head);

#ifdef __cplusplus
}
#endif

#endif // DRINK_H